// 主要工具函数 https://www.uvui.cn/js/intro.html
/**
 * example
 * @description .js uni.$uv.toast()
 * @description .vue this.$uv.toast()
 */

// #ifdef APP-PLUS
import permision from '@/common/libs/permission'
// #endif
/**
 * 打电话
 * @param {String<Number>} phoneNumber - 数字字符串
 */
async function callPhone(phoneNumber = '') {
  // #ifdef APP-PLUS
  const status = await permision.checkPermission('call')
  if (status !== 1) return
  // #endif
  let num = phoneNumber.toString()
  uni.makePhoneCall({
    phoneNumber: num,
    fail(err) {
      console.log('makePhoneCall出错', err)
    },
  })
}

/**
 * 图片处理-预览图片
 * @param {Array} urls - 图片列表
 * @param {Number} current - 首个预览下标
 */
function previewImage(urls = [], current = 0) {
  uni.previewImage({
    urls: urls,
    current: current,
    indicator: 'default',
    loop: true,
    fail(err) {
      console.log('previewImage出错', urls, err)
    },
  })
}

/**
 * 微信头像
 * @param {String} url -图片地址
 */
function checkMPUrl(url) {
  // #ifdef MP
  if (
    url.substring(0, 4) === 'http' &&
    url.substring(0, 5) !== 'https' &&
    url.substring(0, 12) !== 'http://store' &&
    url.substring(0, 10) !== 'http://tmp' &&
    url.substring(0, 10) !== 'http://usr'
  ) {
    url = 'https' + url.substring(4, url.length)
  }
  // #endif
  return url
}

/**
 * 获取H5-真实根地址 兼容hash+history模式
 */
function getRootUrl() {
  let url = ''
  // #ifdef H5
  url = `${location.origin}${Env.PublicPath}`

  if (location.hash !== '') {
    url += '#/'
  }
  // #endif
  return url
}

/**
 * copyText 多端复制文本
 */
function copyText(text) {
  // #ifndef H5
  uni.setClipboardData({
    data: text,
    success: function () {
      uni.$uv.toast('复制成功!')
    },
    fail: function (e) {
      console.log('🚀 ~ copyText ~ e:', e)
      uni.$uv.toast('复制失败!')
    },
  })
  // #endif
  // #ifdef H5
  var createInput = document.createElement('textarea')
  createInput.value = text
  document.body.appendChild(createInput)
  createInput.select()
  document.execCommand('Copy')
  createInput.className = 'createInput'
  createInput.style.display = 'none'
  uni.$uv.toast('复制成功')
  // #endif
}
function saveImageToAlbum(url) {
  if (!uni.$uv.test.image(url)) uni.$uv.toast('不是图片文件')
  // #ifdef H5
  return uni.$uv.toast('请长按图片保存')
  // #endif

  // #ifndef H5
  uni.showLoading({ title: '保存中' })
  // 微信下载文件需要在微信公众平台>开发>开发管理>服务器域名>downloadFile合法域名>配置白名单域名
  uni.downloadFile({
    url: url,
    success: (res) => {
      console.log('🚀 ~ saveImageToAlbum ~ res:', res)
      if (res.statusCode === 200) {
        uni.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success: () => {
            uni.$uv.toast('保存成功')
          },
          fail: (err) => {
            console.log('🚀 ~ onSavePoster ~ err:', err)
            uni.$uv.toast('保存失败')
            // #ifdef MP
            // 未授权，失败后再次保存
            if (err.errMsg === 'saveImageToPhotosAlbum:fail:auth denied' || err.errMsg === 'saveImageToPhotosAlbum:fail auth deny') {
              uni.showModal({
                title: '提示',
                content: '需要您授权保存相册',
                showCancel: false,
                success: (modalSuccess) => {
                  uni.openSetting({
                    success(settingdata) {
                      if (settingdata.authSetting['scope.writePhotosAlbum']) {
                        uni.showModal({
                          title: '提示',
                          content: '获取权限成功,再次点击图片即可保存',
                          showCancel: false,
                        })
                      } else {
                        uni.showModal({
                          title: '提示',
                          content: '获取权限失败，将无法保存到相册哦~',
                          showCancel: false,
                        })
                      }
                    },
                    fail(failData) {
                      console.log('failData', failData)
                    },
                  })
                },
              })
            }
            // #endif
          },
          complete: () => {
            uni.hideLoading()
          },
        })
      }
    },
  })
  // #endif
}

// 获取url参数
function getQueryParams(url) {
  if (!url) return {}

  const queryString = url.includes('?') ? url.split('?')[1] : url
  if (!queryString) return {}

  return queryString.split('&').reduce((acc, param) => {
    let [key, value] = param.split('=')
    key = decodeURIComponent(key)
    value = decodeURIComponent(value)

    // 处理布尔值
    if (value === 'true') {
      value = true
    } else if (value === 'false') {
      value = false
    } else if (!isNaN(value)) {
      // 处理数字
      value = Number(value)
    } else if (value.startsWith('[') && value.endsWith(']')) {
      // 处理数组
      value = JSON.parse(value)
    }

    // 处理数组参数
    if (key.endsWith('[]')) {
      key = key.slice(0, -2)
      if (!acc[key]) {
        acc[key] = []
      }
      acc[key].push(value)
    } else {
      acc[key] = value
    }

    return acc
  }, {})
}

export default {
  callPhone,
  previewImage,
  checkMPUrl,
  getRootUrl,
  copyText,
  saveImageToAlbum,
  getQueryParams,
}
